package com.wenjh.jdmzt.android.view;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.wenjh.jdmzt.R;

/**
 * 全局顶部栏目的按钮对象。包含一个图标和按钮文字，通过设置它们的内容来显示它们。
 * @author wenjianhua
 *
 */
public class ActionButton extends LinearLayout {

	private int layout = R.layout.common_actionbutton;

	private CharSequence labelText = "";

	private View iconView = null;
	private TextView labelView = null;
	
	private View containerView = null;

	public ActionButton(Context context) {
		super(context);
		inflate();
	}

	private ActionButton(Context context, int resId) {
		super(context);
		this.layout = resId;
		inflate();
	}

	public ActionButton(Context context, AttributeSet attribute) {
		super(context, attribute);
		inflate();
	}

	private void inflate() {
		LayoutInflater inflater = ((LayoutInflater) getContext()
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE));
		inflater.inflate(layout, this, true);

		containerView = findViewById(R.id.header_btn_container);
		iconView = findViewById(R.id.header_btn_img);
		labelView = (TextView) findViewById(R.id.header_btn_text);
	}

	@Override
	public void setBackgroundResource(int resid) {
		containerView.setBackgroundResource(resid);
	}
	
	@Override
	public void setBackgroundDrawable(Drawable background) {
		containerView.setBackgroundDrawable(background);
	}
	
	/**
	 * 是否维持选中状态
	 */
	@Override
	public void setSelected(boolean selected) {
		containerView.setSelected(selected);
	}
	
	@Override
	public void setEnabled(boolean enabled) {
		containerView.setEnabled(enabled);
	}
	
	public Drawable getBackground() {
		return containerView.getBackground();
	}
	
	/**
	 * 在按钮上显示一个图标。
	 * 
	 * @param resId
	 *            图标的资源id,如果传入的值小于或等于0，表示不显示此图标
	 */
	public ActionButton setIconResource(int resId) {
		if (resId <= 0) {
			iconView.setVisibility(View.GONE);
		} else {
			iconView.setVisibility(View.VISIBLE);
			iconView.setBackgroundResource(resId);
		}
		return this;
	}
	
	/**
	 * 获取到iconView
	 * @return
	 */
	public View getIconView(){
		return iconView;
	}

	/**
	 * 获取到labelView
	 * @return
	 */
	public TextView getLabelView(){
		return labelView;
	}
	/**
	 * 在按钮上显示一个图标
	 * 
	 * @param d
	 *            可绘制的元素。传入Null，表示不显示此图标
	 */
	public ActionButton setIconDrawable(Drawable d) {
		if (d == null) {
			iconView.setVisibility(View.GONE);
		} else {

			iconView.setVisibility(View.VISIBLE);
			iconView.setBackgroundDrawable(d);
		}
		return this;
	}

	@Override
	public void setOnClickListener(OnClickListener l) {
		if(containerView != null)
			containerView.setOnClickListener(l);
//		super.setOnClickListener(l);
	}
	
	/**
	 * 设置按钮的显示文字。
	 * 
	 * @param c
	 *            为null，表示不显示文字。
	 */
	public ActionButton setText(CharSequence c) {
		if (c == null) {
			labelView.setVisibility(View.GONE);
		} else {
			this.labelText = c;
			labelView.setVisibility(View.VISIBLE);
			labelView.setText(this.labelText);
		}
		return this;
	}

	/**
	 * 设置按钮的显示文字。
	 * 
	 * @param resId
	 *            小于或等于0表示不显示
	 */
	public ActionButton setText(int resId) {
		if (resId <= 0) {
			labelView.setVisibility(View.GONE);
		} else {
			this.labelText = getContext().getString(resId);
			labelView.setVisibility(View.VISIBLE);
			labelView.setText(this.labelText);
		}
		return this;
	}

	/**
	 * 获取按钮显示的文字
	 * 
	 * @return
	 */
	public CharSequence getText() {
		return labelText;
	}

	/**
	 * 载入一份自定义的按钮布局文件。
	 * <p>
	 * 需要注意：布局文件中必须保持有 id 为 header_btn_img 的 View 和 id 为 header_btn_text 的
	 * TextView
	 * </p>
	 * 
	 * @param resId
	 * @param c
	 * 
	 * @return HeaderButton
	 */
	public static ActionButton layout(Context c, int resId) {
		return new ActionButton(c, resId);
	}
}
